package entity.zhujie.lianxi.test.demo01;

import entity.Student;

import java.lang.reflect.Field;

public class CheckStudentUtil {
    /*
    * 检查实例化的学生对象是否合法 - 年龄必须高于注解设置的年龄*/
    public static void check(Class<Student> clazz, Student stu) {
        // 第一：获取操作类的 Class 对象

        // 第二：基于 Class 对象实现相关的操作
        // 1.获取 Student 类的 age 字段对象
        Field ageField = null;

        try {
            ageField = clazz.getDeclaredField("age");
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }

        // 2.判断 age 字段对象上面是否存在 MinAge 注解
        if (ageField.isAnnotationPresent(MinAge.class)) {
            // 3.存在，则获取 age 字段对象注解的值
            // MinAge annotation = ageField
            //         .getAnnotation(MinAge.class);
            // int minAge = annotation.value();

            int minAge = ageField.getAnnotation(MinAge.class).value();

            // 4.逻辑处理 - 增强程序功能
            if (stu.getAge() < minAge) {
                throw new RuntimeException("错误,年龄必须最低为：" + minAge);
            }
        }
    }
}
